Some software programs are designed so that a user can configure the software. That is, the user can select one of several configurations to be used in initiating the software, and the selected configuration determines the software's behavior. For example, configurable software programs (or “drivers”) typically control the operations of a mouse or a printer connected to a personal computer.
Sometimes, the software includes several parameters that affect software operation and these parameters may be settable in the configuration. The user may select one or more values for any of the parameters, perhaps in lieu of default values. The selected values associated with their respective parameters then constitute the user's configuration for the software. The user may select values for fewer than all of the parameters that are available for configuration.
In larger software systems, such as those that control enterprise-wide operations, it may be desirable or necessary to allow extensive configuration. The configuration is usually created by a system administrator of the organization that is to use the system (the “customer”). Different customers may have very different needs and circumstances and, as a result, may require significantly different configurations of the software. The extensive configuration capacity adds complexity to the development and testing of the software. Moreover, the customers sometime run into problems when selecting a configuration that has not been sufficiently tested, because such a configuration may be deficient or unsuccessful. Moreover, when another customer using the same software has identified a solution to the problems that the customer is experiencing, existing systems do not provide convenient sharing of this knowledge such that past experiences can be used in overcoming future problems.